Generic Singleton Factory Method

Java Technologies - জাভা জেনেরিক্স (Java Generics) Advanced Generic Techniques |
156
156

Generic Singleton Factory Method এমন একটি প্যাটার্ন যেখানে একটি সিঙ্গলটন অবজেক্ট তৈরি এবং প্রদান করা হয়, যা জেনেরিক টাইপ ব্যবহার করে টাইপ-সেইফটি নিশ্চিত করে। এটি বিশেষত কোডের পুনঃব্যবহারযোগ্যতা বাড়ায় এবং টাইপ সংক্রান্ত ত্রুটি কমায়।


Generic Singleton Factory Method কী?

  • Generic Singleton: এটি একটি সিঙ্গলটন অবজেক্ট যা একটি নির্দিষ্ট জেনেরিক টাইপের জন্য কাজ করে।
  • Factory Method: একটি মেথড যা সিঙ্গলটন ইনস্ট্যান্স তৈরি বা রিটার্ন করে।
  • উদ্দেশ্য: কোডকে টাইপ-সেইফ করার পাশাপাশি একাধিক টাইপের জন্য একটি সাধারণ সিঙ্গলটন অবজেক্ট প্রদান করা।

Generic Singleton Factory Method এর প্রয়োগ

1. Generic Singleton Class

public class SingletonFactory {
    // Private static instance (generic)
    private static final SingletonFactory INSTANCE = new SingletonFactory();

    // Private constructor to prevent instantiation
    private SingletonFactory() {}

    // Generic Factory Method
    public static <T> T getInstance(Class<T> clazz) throws IllegalAccessException, InstantiationException {
        return clazz.newInstance();
    }
}

ব্যবহারের উদাহরণ

2. Simple Example

public class Main {
    public static void main(String[] args) {
        try {
            // Getting instances of different classes
            String strInstance = SingletonFactory.getInstance(String.class);
            Integer intInstance = SingletonFactory.getInstance(Integer.class);

            System.out.println("String Instance: " + strInstance);
            System.out.println("Integer Instance: " + intInstance);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

আউটপুট:

String Instance: 
Integer Instance: 0

Refined Implementation: Singleton with Predefined Instances

কখনও কখনও পূর্বনির্ধারিত ইনস্ট্যান্স ব্যবহার করে টাইপ অনুযায়ী সিঙ্গলটন তৈরি করা হয়। উদাহরণস্বরূপ:

3. Predefined Singleton Instances

import java.util.HashMap;
import java.util.Map;

public class SingletonFactory {
    // Map to store singletons
    private static final Map<Class<?>, Object> instances = new HashMap<>();

    static {
        instances.put(String.class, "");
        instances.put(Integer.class, 0);
        instances.put(Double.class, 0.0);
    }

    // Generic Factory Method
    @SuppressWarnings("unchecked")
    public static <T> T getInstance(Class<T> clazz) {
        return (T) instances.get(clazz);
    }
}

4. ব্যবহার:

public class Main {
    public static void main(String[] args) {
        // Getting predefined instances
        String str = SingletonFactory.getInstance(String.class);
        Integer num = SingletonFactory.getInstance(Integer.class);
        Double dbl = SingletonFactory.getInstance(Double.class);

        System.out.println("String Instance: " + str);
        System.out.println("Integer Instance: " + num);
        System.out.println("Double Instance: " + dbl);
    }
}

আউটপুট:

String Instance: 
Integer Instance: 0
Double Instance: 0.0

Advanced Example: Thread-Safe Generic Singleton Factory

5. Thread-Safe Implementation

import java.util.concurrent.ConcurrentHashMap;

public class ThreadSafeSingletonFactory {
    private static final ConcurrentHashMap<Class<?>, Object> instances = new ConcurrentHashMap<>();

    // Generic Factory Method
    public static <T> T getInstance(Class<T> clazz) {
        return (T) instances.computeIfAbsent(clazz, cls -> {
            try {
                return cls.getDeclaredConstructor().newInstance();
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        });
    }
}

6. ব্যবহার:

public class Main {
    public static void main(String[] args) {
        String str1 = ThreadSafeSingletonFactory.getInstance(String.class);
        String str2 = ThreadSafeSingletonFactory.getInstance(String.class);

        Integer num1 = ThreadSafeSingletonFactory.getInstance(Integer.class);
        Integer num2 = ThreadSafeSingletonFactory.getInstance(Integer.class);

        System.out.println("String Instances are same: " + (str1 == str2));
        System.out.println("Integer Instances are same: " + (num1 == num2));
    }
}

আউটপুট:

String Instances are same: true
Integer Instances are same: true

Generic Singleton Factory Method এর সুবিধা

  1. টাইপ-সেইফটি: প্রয়োজনীয় টাইপ রানটাইমে না জানালেও, কম্পাইল টাইমে টাইপ চেকিং নিশ্চিত করা হয়।
  2. কোড পুনঃব্যবহারযোগ্যতা: একই প্যাটার্ন দিয়ে বিভিন্ন টাইপের জন্য কাজ করা যায়।
  3. সিঙ্গল ইনস্ট্যান্স: একটি নির্দিষ্ট টাইপের জন্য একই ইনস্ট্যান্স প্রদান করা হয়।
  4. থ্রেড-সেফটি: থ্রেড-সেফ ডেটা স্ট্রাকচার ব্যবহার করে কনকারেন্ট প্রোগ্রামিং সহজ হয়।

  • Generic Singleton Factory Method টাইপ-সেইফ এবং ডাইনামিক প্রোগ্রামিংয়ের জন্য গুরুত্বপূর্ণ।
  • এটি বড় স্কেলের প্রজেক্টে কোড রিডেবিলিটি, মডুলারিটি, এবং পারফরম্যান্স উন্নত করতে ব্যবহৃত হয়।
  • Thread-safe এবং Predefined Instance প্যাটার্ন বড় অ্যাপ্লিকেশন ডেভেলপমেন্টে কার্যকর।
Content added By
Promotion